#!/bin/bash

# 获取环境变量
PLAY_HOME=/opt/playground

# 配置neo4j.conf - 单节点模式
function configureNeo4j()
{
 Neo4jConf=$1
 
 # 检查配置文件是否存在
 if [ -f "$Neo4jConf" ]; then
     # 使用sed命令修改配置
     # 设置允许远程连接
     sed -i 's/#server.default_listen_address=0.0.0.0/server.default_listen_address=0.0.0.0/' $Neo4jConf
     # 设置默认数据库
     sed -i 's/#initial.dbms.default_database=neo4j/initial.dbms.default_database=neo4j/' $Neo4jConf
     # 设置允许Bolt连接
     sed -i 's/#server.bolt.listen_address=:7687/server.bolt.listen_address=:7687/' $Neo4jConf
     # 设置HTTP接口
     sed -i 's/#server.http.listen_address=:7474/server.http.listen_address=:7474/' $Neo4jConf
     
     echo "已配置Neo4j单节点模式"
 else
     echo "配置文件 $Neo4jConf 不存在"
 fi
}

function installNeo4j()
{
 #1.在frames.txt中查看是否需要安装neo4j
 neo4jInfo=`egrep "^neo4j" $PLAY_HOME/frames.txt`
 neo4j=`echo $neo4jInfo | cut -d " " -f1`
 isInstall=`echo $neo4jInfo | cut -d " " -f2`
 neo4jNodes=`echo $neo4jInfo | cut -d " " -f3` 
 masterNode=`echo $neo4jInfo | cut -d " " -f4`
 node=`hostname`
 
 #是否安装
 if [[ $isInstall = "true" && $neo4jNodes =~ $node ]];then
    
     #2.查看$PLAY_HOME/frames目录下是否有neo4j安装包
     neo4jIsExists=`find $PLAY_HOME/frames -name $neo4j`

     if [[ ${#neo4jIsExists} -ne 0 ]];then

          if [[ ! -d /opt/app ]];then
              mkdir /opt/app && chmod -R 775 /opt/app
          fi

          #删除旧的
          neo4j_home_old=`find /opt/app -maxdepth 1 -name "neo4j*"`
          for i in $neo4j_home_old;do
                rm -rf $i
          done

          #3.解压到指定文件夹/opt/app中
          echo "开始解压neo4j安装包"
          tar -zxvf $neo4jIsExists -C /opt/app >& /dev/null
          echo "neo4j安装包解压完毕"

          neo4j_home=`find /opt/app -maxdepth 1 -name "neo4j*"`
          
          #4.配置neo4j文件
          # 检查是否为社区版
          if [[ $neo4j == *"community"* ]]; then
              echo "检测到Neo4j社区版，配置为单节点模式"
              configureNeo4j $neo4j_home/conf/neo4j.conf
          else
              # 获取当前节点IP
              nodeIP=$(grep -w $node /etc/hosts | awk '{print $1}')
              
              # 检查是否有主节点配置
              if [ -n "$masterNode" ]; then
                  echo "警告：社区版Neo4j不支持集群功能，将配置为单节点模式"
                  configureNeo4j $neo4j_home/conf/neo4j.conf
              else
                  echo "配置Neo4j单节点模式"
                  configureNeo4j $neo4j_home/conf/neo4j.conf
              fi
          fi

          #5.配置NEO4J_HOME
          profile=/etc/profile
          sed -i "/^export NEO4J_HOME/d" $profile
          echo "export NEO4J_HOME=$neo4j_home" >> $profile

          #6.配置PATH
          sed -i "/^export PATH=\$PATH:\$NEO4J_HOME\/bin/d" $profile
          echo "export PATH=\$PATH:\$NEO4J_HOME/bin" >> $profile

          #7.更新/etc/profile文件
          source /etc/profile && source /etc/profile
          
          #8.设置初始密码（可选）
          # 如果需要设置初始密码，可以在这里添加相关命令
          # neo4j-admin set-initial-password newpassword
          
          echo "Neo4j安装和配置完成"
          
     else
         echo "$PLAY_HOME/frames目录下没有neo4j安装包"
     fi
 else
     echo "Neo4j不允许安装在当前节点，请检查配置文件！"
 fi
}

installNeo4j